import { createApp } from 'vue'
import { createPinia } from 'pinia'
import router from './router'
import App from './App.vue'

// 引入全局样式
import './styles/index.scss'

// 引入Vant组件库
import 'vant/lib/index.css'
import { Lazyload } from 'vant'

// 引入移动端适配
import 'amfe-flexible'

// 引入FastClick解决移动端点击延迟
import FastClick from 'fastclick'
if ('addEventListener' in document) {
  document.addEventListener('DOMContentLoaded', function() {
    FastClick.attach(document.body)
  }, false)
}

// 引入触摸模拟器（开发环境）
if (import.meta.env.DEV) {
  import('@vant/touch-emulator')
}

// 创建Vue应用实例
const app = createApp(App)

// 使用Pinia状态管理
app.use(createPinia())

// 使用路由
app.use(router)

// 使用Vant懒加载
app.use(Lazyload, {
  loading: '/images/loading.png',
  error: '/images/error.png'
})

// 全局错误处理
app.config.errorHandler = (err, vm, info) => {
  console.error('全局错误:', err)
  console.error('错误信息:', info)
  
  // 在生产环境中，可以将错误发送到错误监控服务
  if (import.meta.env.PROD) {
    // 发送错误到监控服务
    // errorReporting.captureException(err, { extra: { info } })
  }
}

// 全局属性
app.config.globalProperties.$ELEMENT_SIZE = 'small'

// 挂载应用
app.mount('#app')

// 隐藏加载动画
const loadingEl = document.getElementById('loading')
if (loadingEl) {
  loadingEl.style.display = 'none'
}

// 注册Service Worker（生产环境）
if (import.meta.env.PROD && 'serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/sw.js')
      .then((registration) => {
        console.log('SW registered: ', registration)
      })
      .catch((registrationError) => {
        console.log('SW registration failed: ', registrationError)
      })
  })
}

// 监听网络状态
window.addEventListener('online', () => {
  console.log('网络已连接')
  // 可以在这里处理网络恢复后的逻辑
})

window.addEventListener('offline', () => {
  console.log('网络已断开')
  // 可以在这里处理网络断开的逻辑
})

// 监听页面可见性变化
document.addEventListener('visibilitychange', () => {
  if (document.hidden) {
    console.log('页面隐藏')
    // 页面隐藏时的处理逻辑
  } else {
    console.log('页面显示')
    // 页面显示时的处理逻辑
  }
})

// 防止页面被嵌入iframe
if (window.top !== window.self) {
  window.top.location = window.self.location
}

export default app